A set of program instructions for execution by a data-processing apparatus may not only result in execution in a simple, linear manner, i.e. wherein program instructions are executed in sequential order, from a first instruction in a sequence to a last instruction in the sequence. This is because conditions set out in individual program instructions may cause the program flow to take a branch from a given program instruction to another program instruction in the sequence, either skipping forwards in the sequence, or stepping back to a previous program instruction in the sequence. Such possible branching and looping in the execution of a sequence of program instructions may be of particular significance in the context of a data processing apparatus which is capable of executing multiple threads running the same kernel, since performance benefits result from executing such parallel threads in lock-step to make more efficient use of the resources of the data processing apparatus. However, when threads diverge due to different conditions for each thread resulting in those threads taking different branches, such parallelism may be lost. There may however be points at which the separated threads come together again and the opportunity for improved performance through parallel lock-step execution is once more available. The present disclosure relates to the identification of such convergence points.